package com.yc.other.mail;

import java.util.Date;
import java.util.Properties;

import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;


public class Mailer {
	private String host;
	private String auth;
	private String username;
	private String domainUser;
	private String password;

	public Mailer(String host, String auth, String domainUser, String username, String password) {
		super();
		this.host = host;
		this.auth = auth;
		this.domainUser = domainUser;
		this.username = username;
		this.password = password;
	}

	public boolean send(String[] to, String[] cc, String[] bcc, String subject, String content)
			throws MessagingException {
		Properties props = new Properties();
		props.put("mail.smtp.host", host);
		props.put("mail.smtp.auth", auth);
		props.setProperty("mail.smtp.auth.ntlm.domain", "360ser.com");
//		props.setProperty("mail.smtp.port", "443");
		props.put("mail.smtp.auth.mechanisms", "NTLM");
		props.setProperty("mail.smtp.timeout", "5000");
		Session s = Session.getInstance(props);
		s.setDebug(true);

		MimeMessage message = new MimeMessage(s);

		InternetAddress from = new InternetAddress(username);
		message.setFrom(from);
		InternetAddress[] Toaddress = new InternetAddress[to.length];
		for (int i = 0; i < to.length; i++)
			Toaddress[i] = new InternetAddress(to[i]);
		message.setRecipients(Message.RecipientType.TO, Toaddress);

		if (cc != null) {
			InternetAddress[] Ccaddress = new InternetAddress[cc.length];
			for (int i = 0; i < cc.length; i++)
				Ccaddress[i] = new InternetAddress(cc[i]);
			message.setRecipients(Message.RecipientType.CC, Ccaddress);
		}

		if (bcc != null) {
			InternetAddress[] Bccaddress = new InternetAddress[bcc.length];
			for (int i = 0; i < bcc.length; i++)
				Bccaddress[i] = new InternetAddress(bcc[i]);
			message.setRecipients(Message.RecipientType.BCC, Bccaddress);
		}
		message.setSubject(subject);
		message.setSentDate(new Date());

		BodyPart mdp = new MimeBodyPart();
		mdp.setContent(content, "text/html;charset=utf-8");
		Multipart mm = new MimeMultipart();
		mm.addBodyPart(mdp);
		message.setContent(mm);

		message.saveChanges();
		Transport transport = s.getTransport("smtp");
		transport.connect(host, (null == domainUser) ? username : domainUser, password);
		transport.sendMessage(message, message.getAllRecipients());
		transport.close();
		return true;
	}
	
	public static void main(String[] args) throws Exception {
//		new Mailer("smtp.sample.com", "true", "domain\\demo", "demo@sample.com", "password").send(new String[] { "to@mail.com" }, null, null, "demo_title", "<h3>test</h3>"); 
		new Mailer("mail.360ser.com", "true", "yuancan", "yuancan@360ser.com", "p@ssw0rd").send(new String[] {"yuancan@360ser.com"}, null, null, "demo_title", "<h3>test</h3>"); 
	}

}
